import Vue from 'vue'
import Router from 'vue-router'

Vue.use(Router)

/* Layout */
import Layout from '@/views/layout/Layout'

/* Router Modules */
import componentsRouter from './modules/components'
import chartsRouter from './modules/charts'
import tableRouter from './modules/table'
import nestedRouter from './modules/nested'
import statisticRouter from './modules/statistic'
import powerRouter from './modules/power'
import orgRouter from './modules/organizational'
import admRouter from './modules/administration'
import rechStatRouter from './modules/rechargeStat'



/** note: Submenu only appear when children.length>=1
 *  detail see  https://panjiachen.github.io/vue-element-admin-site/guide/essentials/router-and-nav.html
 **/

/**
* hidden: true                   if `hidden:true` will not show in the sidebar(default is false)
* alwaysShow: true               if set true, will always show the root menu, whatever its child routes length
*                                if not set alwaysShow, only more than one route under the children
*                                it will becomes nested mode, otherwise not show the root menu
* redirect: noredirect           if `redirect:noredirect` will no redirect in the breadcrumb
* name:'router-name'             the name is used by <keep-alive> (must set!!!)
* meta : {
    roles: ['admin','editor']    will control the page roles (you can set multiple roles)
    title: 'title'               the name show in submenu and breadcrumb (recommend set)
    icon: 'svg-name'             the icon show in the sidebar
    noCache: true                if true, the page will no be cached(default is false)
    breadcrumb: false            if false, the item will hidden in breadcrumb(default is true)
  }
**/
export const constantRouterMap = [{
        path: '/redirect',
        component: Layout,
        hidden: true,
        children: [{
            path: '/redirect/:path*',
            component: () =>
                import ('@/views/redirect/index')
        }]
    },
    {
        path: '/login',
        component: () =>
            import ('@/views/login/index'),
        hidden: true
    },
    {
        path: '/auth-redirect',
        component: () =>
            import ('@/views/login/authredirect'),
        hidden: true
    },
    {
        path: '/404',
        component: () =>
            import ('@/views/errorPage/404'),
        hidden: true
    },
    {
        path: '/401',
        component: () =>
            import ('@/views/errorPage/401'),
        hidden: true
    },
    {
        path: '',
        component: Layout,
        redirect: 'dashboard',
        children: [{
            path: 'dashboard',
            component: () =>
                import ('@/views/dashboard/index'),
            name: 'Dashboard',
            meta: {
                title: 'dashboard',
                icon: 'dashboard',
                noCache: true,
                roles: ['admin', 'editor']
            }
        }]
    },
    {
        path: '/documentation',
        component: Layout,
        redirect: '/documentation/index',
        children: [{
            path: 'index',
            component: () =>
                import ('@/views/documentation/index'),
            name: 'Documentation',
            meta: {
                title: 'documentation',
                icon: 'documentation',
                noCache: true
            }
        }]
    },
    {
        path: '/guide',
        component: Layout,
        redirect: '/guide/index',
        children: [{
            path: 'index',
            component: () =>
                import ('@/views/guide/index'),
            name: 'Guide',
            meta: {
                title: 'guide',
                icon: 'guide',
                noCache: true,
            }
        }]
    }
]

export default new Router({
    // mode: 'history', // require service support
    scrollBehavior: () => ({ y: 0 }),
    routes: constantRouterMap
})

export const asyncRouterMap = [{
        path: '/permission',
        component: Layout,
        redirect: '/permission/index',
        alwaysShow: true, // will always show the root menu
        meta: {
            title: 'permission',
            icon: 'lock',
            guid: '80a78ca9-1e2f-11ef-a12f-00163e0acd8d',
            roles: ['admin', 'editor'] // you can set roles in root nav
        },
        children: [{
                path: 'page',
                component: () =>
                    import ('@/views/permission/page'),
                name: 'PagePermission',
                meta: {
                    title: 'pagePermission',
                    guid: 'fe8e5d2b-1e2f-11ef-a12f-00163e0acd8d',
                    roles: ['admin'] // or you can only set roles in sub nav
                }
            },
            {
                path: 'directive',
                component: () =>
                    import ('@/views/permission/directive'),
                name: 'DirectivePermission',
                meta: {
                    title: 'directivePermission',
                    guid: '40ddc5de-1e30-11ef-a12f-00163e0acd8d',
                    roles: ['admin'] // if do not set roles, means: this page does not require permission
                }
            }
        ]
    },

    {
        path: '/icon',
        component: Layout,
        meta: {
            guid: '87971934-1e36-11ef-a12f-00163e0acd8d',
            roles: ['admin']
        },
        children: [{
            path: 'index',
            component: () =>
                import ('@/views/svg-icons/index'),
            name: 'Icons',
            meta: {
                title: 'icons',
                icon: 'icon',
                noCache: true,
                guid: 'a9ce0724-1e30-11ef-a12f-00163e0acd8d',
                roles: ['admin']
            }
        }]
    },

    /** When your routing table is too long, you can split it into small modules**/

    componentsRouter,
    statisticRouter,
    rechStatRouter,
    admRouter,
    orgRouter,
    powerRouter,
    chartsRouter,
    nestedRouter,
    tableRouter,
    {
        path: '/example',
        component: Layout,
        redirect: '/example/list',
        name: 'Example',
        meta: {
            title: 'example',
            icon: 'example',
            guid: 'c3f59685-1e30-11ef-a12f-00163e0acd8d',
            roles: ['admin']
        },
        children: [{
                path: 'create',
                component: () =>
                    import ('@/views/example/create'),
                name: 'CreateArticle',
                meta: {
                    title: 'createArticle',
                    icon: 'edit',
                    guid: 'f65c3e35-1e30-11ef-a12f-00163e0acd8d',
                    roles: ['admin']
                }
            },
            {
                path: 'edit/:id(\\d+)',
                component: () =>
                    import ('@/views/example/edit'),
                name: 'EditArticle',
                meta: {
                    title: 'editArticle',
                    noCache: true,
                    guid: '406ade09-1e31-11ef-a12f-00163e0acd8d',
                    roles: ['admin']
                },
                hidden: true
            },
            {
                path: 'list',
                component: () =>
                    import ('@/views/example/list'),
                name: 'ArticleList',
                meta: {
                    title: 'articleList',
                    icon: 'list',
                    guid: '12c15f92-1e31-11ef-a12f-00163e0acd8d',
                    roles: ['admin']
                }
            }
        ]
    },

    {
        path: '/tab',
        component: Layout,
        meta: {
            guid: 'c8baadc6-1e36-11ef-a12f-00163e0acd8d',
            roles: ['admin']
        },
        children: [{
            path: 'index',
            component: () =>
                import ('@/views/tab/index'),
            name: 'Tab',
            meta: {
                title: 'tab',
                icon: 'tab',
                guid: '5d6fff79-1e31-11ef-a12f-00163e0acd8d',
                roles: ['admin']
            }
        }]
    },

    {
        path: '/error',
        component: Layout,
        redirect: 'noredirect',
        name: 'ErrorPages',
        meta: {
            title: 'errorPages',
            icon: '404',
            guid: 'c23a5b78-1e31-11ef-a12f-00163e0acd8d',
            roles: ['admin']
        },
        children: [{
                path: '401',
                component: () =>
                    import ('@/views/errorPage/401'),
                name: 'Page401',
                meta: {
                    title: 'page401',
                    noCache: true,
                    guid: 'd4f440fd-1e31-11ef-a12f-00163e0acd8d',
                    roles: ['admin']
                }
            },
            {
                path: '404',
                component: () =>
                    import ('@/views/errorPage/404'),
                name: 'Page404',
                meta: {
                    title: 'page404',
                    noCache: true,
                    guid: 'e8d77fcc-1e31-11ef-a12f-00163e0acd8d',
                    roles: ['admin']
                }
            }
        ]
    },

    {
        path: '/error-log',
        component: Layout,
        redirect: 'noredirect',
        meta: {
            guid: 'fa705ded-1e36-11ef-a12f-00163e0acd8d',
            roles: ['admin']
        },
        children: [{
            path: 'log',
            component: () =>
                import ('@/views/errorLog/index'),
            name: 'ErrorLog',
            meta: {
                title: 'errorLog',
                icon: 'bug',
                guid: 'ff6c5f92-1e31-11ef-a12f-00163e0acd8d',
                roles: ['admin']
            }
        }]
    },

    {
        path: '/excel',
        component: Layout,
        redirect: '/excel/export-excel',
        name: 'Excel',
        meta: {
            title: 'excel',
            icon: 'excel',
            guid: '3cee0118-1e32-11ef-a12f-00163e0acd8d',
            roles: ['admin']
        },
        children: [{
                path: 'export-excel',
                component: () =>
                    import ('@/views/excel/exportExcel'),
                name: 'ExportExcel',
                meta: {
                    title: 'exportExcel',
                    guid: '4ae0f0b6-1e32-11ef-a12f-00163e0acd8d',
                    roles: ['admin']
                }
            },
            {
                path: 'export-selected-excel',
                component: () =>
                    import ('@/views/excel/selectExcel'),
                name: 'SelectExcel',
                meta: {
                    title: 'selectExcel',
                    guid: '58ebe1f5-1e32-11ef-a12f-00163e0acd8d',
                    roles: ['admin']
                }
            },
            {
                path: 'upload-excel',
                component: () =>
                    import ('@/views/excel/uploadExcel'),
                name: 'UploadExcel',
                meta: {
                    title: 'uploadExcel',
                    guid: '685f879c-1e32-11ef-a12f-00163e0acd8d',
                    roles: ['admin']
                }
            }
        ]
    },

    {
        path: '/zip',
        component: Layout,
        redirect: '/zip/download',
        alwaysShow: true,
        meta: {
            title: 'zip',
            icon: 'zip',
            guid: '8a344f56-1e32-11ef-a12f-00163e0acd8d',
            roles: ['admin']
        },
        children: [{
            path: 'download',
            component: () =>
                import ('@/views/zip/index'),
            name: 'ExportZip',
            meta: {
                title: 'exportZip',
                guid: 'a362938f-1e32-11ef-a12f-00163e0acd8d',
                roles: ['admin']
            }
        }]
    },

    {
        path: '/pdf',
        component: Layout,
        redirect: '/pdf/index',
        meta: {
            title: 'PDF',
            icon: 'pdf',
            guid: 'ef9d03ed-1e32-11ef-a12f-00163e0acd8d',
            roles: ['admin']
        },
        children: [{
            path: 'index',
            component: () =>
                import ('@/views/pdf/index'),
            name: 'PDF',
            meta: {
                title: 'PDF',
                guid: 'c46708bb-1e32-11ef-a12f-00163e0acd8d',
                roles: ['admin']
            }
        }]
    },
    {
        path: '/pdf/download',
        component: () =>
            import ('@/views/pdf/download'),
        hidden: true,
        meta: {}
    },

    {
        path: '/theme',
        component: Layout,
        redirect: 'noredirect',
        meta: {
            guid: '41dff30e-1e33-11ef-a12f-00163e0acd8d',
            roles: ['admin', 'editor']
        },
        children: [{
            path: 'index',
            component: () =>
                import ('@/views/theme/index'),
            name: 'Theme',
            meta: {
                title: 'theme',
                icon: 'theme',
                guid: '6f5476fa-1e33-11ef-a12f-00163e0acd8d',
                roles: ['admin', 'editor']
            }
        }]
    },

    {
        path: '/clipboard',
        component: Layout,
        redirect: 'noredirect',
        meta: {
            title: 'clipboard',
            icon: 'clipboard',
            guid: '8287b372-1e33-11ef-a12f-00163e0acd8d',
            roles: ['admin', 'editor']
        },
        children: [{
            path: 'index',
            component: () =>
                import ('@/views/clipboard/index'),
            name: 'ClipboardDemo',
            meta: {
                title: 'clipboardDemo',
                icon: 'clipboard',
                guid: 'c083a22f-1e33-11ef-a12f-00163e0acd8d',
                roles: ['admin', 'editor']
            }
        }]
    },

    {
        path: '/i18n',
        // component: Layout,
        component: () =>
            import ('@/views/i18n-demo/index'),
        meta: {
            title: 'i18n',
            icon: 'international',
            guid: 'd341b8c4-1e33-11ef-a12f-00163e0acd8d',
            roles: ['admin', 'editor']
        },
        children: [{
            path: 'index',
            component: () =>
                import ('@/views/i18n-demo/index'),
            name: 'I18n',
            meta: {
                title: 'i18n',
                icon: 'international',
                guid: '0a029ba7-1e34-11ef-a12f-00163e0acd8d',
                roles: ['admin', 'editor']
            }
        }]
    },

    {
        path: 'external-link',
        component: Layout,
        meta: {
            title: 'externalLink',
            icon: 'link',
            guid: '1e72a020-1e34-11ef-a12f-00163e0acd8d',
            roles: ['admin', 'editor']
        },
        children: [{
            path: 'https://github.com/PanJiaChen/vue-element-admin',
            meta: {
                title: 'externalLink',
                icon: 'link',
                guid: '5e4c6b34-1e34-11ef-a12f-00163e0acd8d',
                roles: ['admin', 'editor']
            }
        }]
    },

    { path: '*', redirect: '/404', hidden: true }
]